 
use std::ops::Deref;
 
fn hello_ref_string(name: &str) {
    println!("Hello, {name}!");
}

fn main() {
    //1.0 Box的隐式转换  -- &Box转为 &String,不需要写复杂的 &(*Box)
    let eng=String::from("英国佬");
    let eng_box=Box::new(eng);
    hello_ref_string(&eng_box);  // 隐式转换，把 &Box转为 &String。 通过这种引用可以省掉 * 符号

    //2.0 如果愿意，也可以使用*符号显式转换。

    let german=String::from("德国佬");
    let german_box=Box::new(german);
    hello_ref_string(&*german_box);  // 这相当于*解除引用后得到T，再&T得到&T 

    //3.0  也可以显示调用deref方法

    let french=String::from("法国佬");
    let french_box=Box::new(french);
    hello_ref_string(french_box.deref());  // 显式调用Deref方法，得到&T
}